home *** CD-ROM | disk | FTP | other *** search
/ MacHack 1994 / MacHack 1994.toast / MacHack™ 1987-1994 / MacHack™ '92 / Hacks ’92 / Savvy ƒ / IsSavvyTool.c < prev    next >
Encoding:
C/C++ Source or Header  |  1992-06-19  |  2.4 KB  |  106 lines  |  [TEXT/MPS ]

  1. /* @(#) IsSavvyTool.c 6/17/92
  2.     {Sources}Hack:IsSavvyTool.c
  3.  
  4.     No rights reserved
  5.     
  6.     Product:        Joel’s MacHack ’92 entry
  7.     File:            IsSavvyTool.c
  8.     Author:            Joel West, Palomar Software
  9.     Date:            Wed, Jun 17, 1992
  10.     Description:    MPW tool prototype
  11.                     Used to validate core logic, basically accuracy
  12.                     of TSizeStruct and usage of 'SIZE' 0/-1
  13.     Usage:
  14.             IsSavvy file1 [… file2 …]
  15.         check accuracy against
  16.             DeRez -only 'SIZE' file Types.r
  17. */
  18.  
  19. #include "Savvy.h"
  20. #include <stdio.h>
  21. #include <stdlib.h>
  22. #include <ErrMgr.h>
  23. #include <Strings.h>
  24. #include <Resources.h>
  25. #include <Errors.h>
  26. #include <Memory.h>
  27.  
  28. #define kDefaultSize    -1
  29. #define kUserSize    0
  30.  
  31.  
  32. main (Integer argC, char **argV)
  33. {    Integer i;
  34.     OSErr err;
  35.     Integer    exitCode = 0;
  36.     TSizeStruct sizersrc;
  37.     char msg[255];
  38.  
  39.     InitErrMgr(NULL,NULL,true);
  40.  
  41.     for ( i = 1; i < argC; i++ ) {
  42.  
  43.     /*    Check the resource attrs */
  44.         c2pstr(argV[i]);
  45.         err = GetSavvyRsrcFromName(argV[i],&sizersrc);
  46.         switch (err) {
  47.             case noSizeRsrc:
  48.             case notApp:
  49.                 goto doublebreak;
  50.         }
  51.  
  52.         if ( err != noErr ) {
  53.             fprintf ( stderr, "# %s - Can’t open file : %P\n", argV[0], argV[i]);
  54.             (void) GetSysErrText(err, msg);
  55.             fprintf ( stderr, "# %s\n", msg);
  56.             exitCode = 1;
  57.             break;
  58.         }
  59.         printf("%P\t%c%c%c%c%c\n", argV[i], 
  60.                 sizersrc.is32BitCompatible ? '3' : '2',
  61.                 sizersrc.isHighLevelEventAware ? 'H' : 'h',
  62.                 sizersrc.localAndRemoteHLEvents ? 'R' : 'r',
  63.                 sizersrc.isStationeryAware ? 'S' : 's',
  64.                 sizersrc.useTextEditServices ? 'T' : 't');
  65.     }
  66. doublebreak:
  67.     exit ( exitCode );
  68. }
  69.  
  70. /* Open the specified file and get its 'SIZE' resource */
  71. OSErr GetSavvyRsrcFromName(ConstStr255Param pathname,TSizeStruct *foundsize)
  72. {    OSErr err;
  73.     Integer refno;
  74.  
  75.     refno = OpenResFile(pathname);
  76.     err = ResError();
  77.     if (refno >= 0 && err == noErr) {
  78.         err = GetSavvyRsrc(refno, foundsize);
  79.         CloseResFile(refno);
  80.         if (err == noErr)
  81.             err = ResError();
  82.     }
  83.     
  84.     return err;
  85. }
  86.  
  87. /* Get the best 'SIZE' resource from the specified resource file */
  88. OSErr GetSavvyRsrc(Integer refnum,TSizeStruct *foundsize)
  89. {    Handle h;
  90.     OSErr err;
  91.     Integer curmap = CurResFile();
  92. // set resload?
  93.  
  94.     UseResFile(refnum);
  95.     h = Get1Resource('SIZE',kUserSize);
  96.     if (h == NULL)
  97.         h = Get1Resource('SIZE',kDefaultSize);
  98.     err = ResError();
  99.     UseResFile(curmap);
  100.     if (h != NULL) {
  101.         BlockMove(*h,foundsize,sizeof(TSizeStruct));
  102.         ReleaseResource(h);
  103.         return noErr;
  104.     }
  105.     return (err == resNotFound) ? noSizeRsrc : err;
  106. }